package com.InterestingExercises;

import java.util.Scanner;

public class 整型数组左奇右偶分类 {
    public static void main(String[] args) {
        /*定义一个数组其中包含多个数字。用自己的方式最终实现，奇数放在数组的左边，偶数放在数组的右边。（可以创建其他数组，不必须在原数组中改变）*/

        /*用一个数组实现,不借助第二个数组!*/

        Scanner sc = new Scanner(System.in);
        System.out.print("请输入数组的长度:");
        int length = sc.nextInt();
        int[] arr = new int[length];
        System.out.println("请输入数组的元素:");

        for (int i = 0; i < arr.length; i++) {
            System.out.print("请输入第" + (i + 1) + "个元素的值:");
            arr[i] = sc.nextInt();
        }

        System.out.println("数组原来的序列如下:");
        for (int i = 0; i < arr.length; i++) {
            System.out.println("arr[" + i + "]=" + arr[i]);
        }


        //开始操作(不借助第二个数组完成)
        int head = 0, tail = arr.length - 1;//用于标记暂未排序的区域
        int temp;//用于完成左移操作时临时存储值
        while (head < tail) {//遍历未排序区域
            if (arr[head] % 2 == 0) {//如果这一位是偶数
                //未排序区整体左移一位
                temp = arr[head];//最左边一位已空出
                for (int j = head + 1; j <= tail; j++) {
                    arr[j - 1] = arr[j];
                }//左移其他位
                arr[tail] = temp;//将temp中存储的最左边一位放到arr[tail]
                tail--;//tail左移一位
            } else {//如果这一位是奇数
                //无需移动
                head++;//直接head右移
            }
        }


        System.out.println("一通操作后的数组如下:");
        for (int i = 0; i < arr.length; i++) {
            System.out.println("arr[" + i + "]=" + arr[i]);
        }

    }
}


        /*
        *
        *
        * 答案实现(借助于第二个数组)
        * //1.定义原数组
        int[] arr = {12, 23, 34, 45, 67, 78, 11, 22};
        //2.定义空数组
        int[] brr = new int[arr.length];
        //3.定义变量代表奇数要存放的位置
        int left = 0;
        //4.定义变量代表偶数要存放的位置
        int right = arr.length - 1;
        //5.对原数组进行遍历
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] % 2 == 1) {
                //5.1如果是奇数就往左边放
                brr[left] = arr[i];
                //5.2存放之后让索引向右移动
                left++;
            } else {
                //5.3如果是偶数就往右边放
                brr[right] = arr[i];
                //5.4存放之后让索引向左移动
                right--;
            }
        }
        //6.打印brr数组
        for (int i = 0; i < brr.length; i++) {
            System.out.print(brr[i] + " ");
        }

        *
        *
        *
        * */


